本文最初由 Eilidh McAdam 发表于 Lanedo 博客,由 LibreOffice 中文社区翻译。
初次查看LibreOffice的源代码,您会被它庞大的代码量所吓倒。本文列出了LibreOffice代码库中一些有用的目录结构,希望有助于您入门。
总体布局
LibreOffice 由100多个相互依赖的模块组成, 每个模块位于LibreOffice源代码根目录下的一个文件夹中。请注意,除非特别注明,以下提到的所有路径都是相对于这个根目录的。每个模块一般都遵循特定的规则,至少包含以下文件或目录:
- moduledir/README
- 一般包含关于该模块用途以及内容的描述。您可以在docs.libreoffice.org 找到所有的LibreOffice模块以及这些模块README第一行内容的清单。
- moduledir/*.mk
- 各种编译可能性下的 gbuild makefiles.
- moduledir/source/
- 源代码(一般情况下是 C++)。经常会有源代码以子模块(submodules)的形式出现。
头文件 (headers)
您会在多个地方看到头文件,这取决于定义的接口需要的最小作用范围 (Scope)。
- include/
- 模块间的头文件。
- moduledir/inc/
- 模块内的头文件。
- moduledir/source/submoduledir/inc/
- 仅某个子模块要求的头文件。
在偶然的情况下,头文件也有可能在它们的 .cxx 函数实现中一同出现。
UI(用户界面)
如果一个模块有关联的GUI,则主要存在两种情况。目前,将用户界面规范从老旧的.src/.hrc格式转换为基于xml的 Glade/Gtk3 .ui 格式的工作正在进行中。
- moduledir/uiconfig/
- 新的Glade风格的 .ui 文件。
- moduledir/source/ui/
- 其它的 .src 文件。
编译系统
有一个来自2013年米兰LibreOffice年会上的非正式幻灯片,探讨了LibreOffice的编译系统状况。以下部分只列出了简短的概要,该幻灯片对一些细节有更细致的描述。
- solenv/
- 包含编译系统的很多重要部分。
- solenv/gbuild
- gbuild 实现。
- solenv/bin ; solenv/bin/modules/
- Perl 编译和打包工具。
- scp2/
- 打包和安装的配置文件。
当使用 ./autogen.sh 以及 make 完成了LibreOffice的编译之后,一个可运行的完整安装可在以下位置找到:
- instdir/program/
在那里您可以找到 soffice.bin 以及 soffice. 前者是LibreOffice的主要二进制程序。当首次运行时,它建立用户配置文件 (user profile) 并退出,之后就可以再次以正常方式运行了。要避免该过程,应当使用包装程序 soffice 作为测试目的来运行LibreOffice。当以debugger模式运行LibreOffice时,应当直接使用 soffice.bin .
主要部件
LibreOffice Writer 文本文档
由于LibreOffice在历史上属于Sun的Star分支,它的主要部件位置包含了指向该legacy的提示。比如 ,Writer模块包含在 sw/ 目录中 (StarWriter)。
LibreOffice Calc 电子表格
LibreOffice Draw 绘图(以及 LibreOffice Impress 演示文稿)
仅 LibreOffice Impress 演示文稿
- slideshow/
- Impress的幻灯片演示引擎。
图形模块
- svx/
- 包含由几个主要模块共享的图形 (graphics) 辅助代码,尤其是Draw和Impress。
- drawinglayer/
- 为绘图对象提供了一个API。
文档
- sfx2/
- 包含被sw, sc和sd使用的用于调用document shells的框架。该模块包含文档载入及保存处理,文档载入和保存会分别激发正确的导入(import)和导出(export)筛选器。
- writerfilter/
- Writer .rtf 导入筛选器,以及部分的 .docx 导入筛选器。
- writerperfect/
- 一个Writer导入筛选器家族,包含 WordPerfect, Microsoft Publisher 以及 Microsft Visio 文档格式导入筛选器。
- oox/
- 对微软OOXML格式解析的支持 (.docx, .xlsx, etc.)
如果您想要解决Libreoffice的bug或者设计新的功能,通过以上的描述,希望您能知道该从何处下手。若需要更多帮助和资源,请参考我的 LibreOffice Development Howto 。如果需要专业支持,请随时联系我们。
发表回复